package com.autoglm.android.core.models

/**
 * 执行错误类型枚举
 */
enum class ErrorType {
    ELEMENT_NOT_FOUND,       // 元素未找到
    OPERATION_TIMEOUT,       // 操作超时
    APP_NOT_RESPONDING,      // 应用无响应
    PERMISSION_DENIED,       // 权限被拒绝
    APP_NOT_INSTALLED,       // 应用未安装
    UNEXPECTED_SCREEN,       // 意外屏幕
    CONNECTION_ERROR,        // 网络连接错误
    UNKNOWN                  // 未知错误
}

/**
 * 恢复操作类型枚举
 */
enum class RecoveryActionType {
    RETRY_OPERATION,         // 重试操作
    WAIT_AND_RETRY,          // 等待后重试
    TRY_ALTERNATIVE_PATH,    // 尝试替代路径
    RESTART_APP,             // 重启应用
    CLEAR_APP_DATA,          // 清除应用数据
    REQUEST_USER_HELP,       // 请求用户帮助
    SKIP_STEP,               // 跳过当前步骤
    ABORT_TASK               // 中止任务
}

/**
 * 恢复策略数据类
 */
data class RecoveryStrategy(
    val errorType: ErrorType,                 // 错误类型
    val actionType: RecoveryActionType,       // 恢复操作类型
    val maxRetries: Int = 3,                  // 最大重试次数
    val waitTimeMs: Long = 1000,              // 等待时间(毫秒)
    val alternativePath: List<String>? = null, // 替代路径步骤ID列表
    val description: String? = null           // 策略描述
)

/**
 * 恢复结果数据类
 */
data class RecoveryResult(
    val success: Boolean,                     // 恢复是否成功
    val message: String? = null,              // 结果信息
    val nextStepId: String? = null            // 恢复后执行的步骤ID
) {
    companion object {
        fun success(nextStepId: String? = null) = 
            RecoveryResult(true, nextStepId = nextStepId)
            
        fun failure(message: String) = 
            RecoveryResult(false, message = message)
    }
} 